package com.sczfdf.www.sda.gov.cn.dao;

import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.mchange.v2.c3p0.ComboPooledDataSource;  

public class C3P0ConnentionProvider {  
	  
    private static ComboPooledDataSource ds;
      
    /** 
     * 初始化连接池代码块 
     */  
    static{  
        initDBSource();  
    }  
      
    /** 
     * 初始化c3p0连接池 
     */  
    private static final void initDBSource(){  
        try {  
        	ds = new ComboPooledDataSource();  
        	ds.setUser("root");  
        	ds.setPassword("root");  
        	ds.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/my?user=root&password=123456&useUnicode=true");  
        	ds.setDriverClass("com.mysql.jdbc.Driver");  
            // 设置初始连接池的大小！  
        	ds.setInitialPoolSize(30);  
            // 设置连接池的最小值！   
        	ds.setMinPoolSize(15);  
            // 设置连接池的最大值！   
        	ds.setMaxPoolSize(100);  
            // 设置连接池中的最大Statements数量！  
        	ds.setMaxStatements(50);  
            // 设置连接池的最大空闲时间！  
        	ds.setMaxIdleTime(600);  
        } catch (PropertyVetoException e) {  
            throw new RuntimeException(e);  
        }  
    }  
      
    /** 
     * 获取数据库连接对象 
     * @return 数据连接对象 
     * @throws SQLException  
     */  
    public static synchronized Connection getConnection() throws SQLException{  
        final Connection conn = ds.getConnection();  
        conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);  
        return conn;  
    } 
    
  //释放连接回连接池
    public static void close(Connection conn,PreparedStatement pst,ResultSet rs){  
           if(rs!=null){  
               try {  
                   rs.close();  
               } catch (SQLException e) {  
            	   e.printStackTrace();
               }  
           }  
           if(pst!=null){  
               try {  
                   pst.close();  
               } catch (SQLException e) {  
            	   e.printStackTrace();
               }  
           }  
     
           if(conn!=null){  
               try {  
                   conn.close();  
               } catch (SQLException e) {  
            	   e.printStackTrace();
               }  
           }  
       }  
}  